Als alter Perl-Hacker und Web Services-Veteran war ich überrascht, mit wie wenig Aufwand man mit SOAP::Lite loslegen kann (lesen Sie dazu den Artikel Ein Web Service mit SOAP::Lite). Ich kenne kein anderes so umfangreiches SOAP-Toolkit, das so einfach zu verwenden, schnell einzusetzen und flexibel ist. In den folgenden Beispielen werde ich Ihnen zeigen, wie man
- auf Parameter-Elemente mit Namen zugreift;
- auf SOAP Header-Elemente in einem Request zugreift;
- einem Response einen SOAP-Header hinzufügt;
- eine SOAP-Fault erzeugt;
- eine Response unter Verwendung von Document Style Encoding erzeugt.
Auf ein SOAP Body-Element mit Namen zugreifen
Standardmäßig schlüsselt SOAP::Lite die einzelnen Daten der SOAP Request-Methode auf und speichert sie in einem entsprechenden Array. Dieses Array wird an die Subroutine des Request-Handlers übergeben. Die Request-Handler-Subroutine kann dann auf diese Parameter zugreifen wie auf jede andere Eingabe mit Parametern. Dies macht die Erstellung von Prototypen unterschiedlicher Services einfach, geht aber u.U. auf Kosten der Flexibilität. Wenn Ihre Methode optionale Parameter hat, wenn sie Attribute hat, auf die Sie zugreifen müssen, oder wenn es nicht auf die Reihenfolge der Parameter ankommt, die Ihrer Methode übergeben werden, dann ist diese zusätzliche Stufe der Vereinfachung eher schädlich als nützlich.
SOAP::Lite bietet eine bequemere Möglichkeit, auf Elemente im Request mit Namen zuzugreifen. Dies gibt einem die zusätzliche Flexibilität, was die Arten von Interfaces für den Service betrifft, die man festlegen möchte. Hier ein Beispiel dafür:
1 #!/usr/bin/perl 2 # Dateiname: Echo.pm 3 package Echo; 4 use strict; 5 use vars qw(@ISA); 6 @ISA = qw(SOAP::Server::Parameters); 7 sub echo { 8 my $self = shift; 9 my $envelope = pop; 10 my $str = $envelope->dataof("//echo/whatToEcho")->value; 11 return $str; 12 } 13 1;
Durch die Erweiterung des SOAP::Server::Parameters-Packages in Zeile 5 und 6 kann man den SOAP-Envelope nach Daten-Elementen abfragen. Um auf den SOAP-Body zuzugreifen, entfernt man zuerst mit der Funktion pop das SOAP-Envelope-Objekt, das automatisch an die Methode übergeben wird. Dann ruft man die Subroutine dataof() auf, um ein SOAP::Data-Objekt zurück zu erhalten, das dem Element name/XPath entspricht, das man angegeben hat (Zeile 10). Da dataof() ein SOAP::Data-Objekt zurückgibt, haben Sie Zugriff auf alle Subroutingen von SOAP::Data, einschließlich value(), name(), type(), uri() und attr(), und können so direkt auf Wert, Namen, Datentyp, URI und alle Attribute des jeweiligen Elements zugreifen.
Neueste Kommentare
Noch keine Kommentare zu SOAP::Lite Web Service erweitern
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.